<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <!--头部固定引用-->
  <meta charset="utf-8">
  <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
  <meta http-equiv="Pragma" content="no-cache" />
  <meta http-equiv="Expires" content="0" />

  <meta name="full-screen" content="yes">
  <meta name="x5-fullscreen" content="true">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
  <link rel="stylesheet" href="../../css/base.css">
  <link rel="stylesheet" href="../../css/icon-font.css">
  <link rel="stylesheet" href="../../css/info-detail.css">
  <link rel="stylesheet" href="../../css/newCommentDetail.css">
  <link rel="stylesheet" href="../../css/actionsheet.css">
  <!--固定引用结束,自定义引用添加在下面-->
  <title>资讯详情</title>
  <!--页面样式添加在这里，多看看base。css里面的公共样式，大部分常用的都有，避免使用独立css文件为单独页面设置样式，避免随意添加样式到公共样式-->
  <style>
    * {
      box-sizing: border-box;
      -webkit-touch-callout: all !important;
      -webkit-user-select: auto !important;
      -moz-user-select: auto !important;
      -ms-user-select: auto !important;
      user-select: auto !important;
    }

    .info-detail-describe {
      padding-bottom: 10px;
    }

    .see-more {
      color: #E1251B;
      text-decoration: none;
    }

    .ta-center img {
      max-width: 70%;
    }

    .info-auth-photo {
      float: right;
      width: 70px;
      height: 70px;
      /* padding: .1rem; */
      /* border: 1px solid #FAA7A0; */
      box-sizing: border-box;
      border-radius: 1rem;
      overflow: hidden;
      display: flex;
      align-items: center;
      justify-content: center;
      margin-top: .2rem;
    }

    .info-auth-photo img {
      width: 64px;
      height: 64px;
      border-radius: 1rem;
    }

    .info-detail-auth {
      padding: 0 !important;
      /* box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.05); */
      margin: 0 auto;
      max-width: 96%;
      position: relative;
      border-radius: .1rem;
      /* border: 1px solid #FFC7C7;
        background: linear-gradient(180deg, #FFF7F7 0%, #FFFFFF 100%); */
    }

    .info-detail-auth>p {
      font-size: 12px;
      /* color: rgba(0, 0, 0, 0.65); */
      margin-top: 0;
    }


    .auth-mark {
      width: 335px;
      background: url('../../images/details/back.png') no-repeat !important;
      position: absolute;
      top: 0rem;
      left: 0rem;
      color: white !important;
      margin-left: 0 !important;
    }

    .info-auth-content {
      padding-top: .5rem;
    }

    #auth-character {
      padding: 0 10px;
      display: inline-block;
    }

    .info-auth-content p:nth-of-type(1) {
      font-size: 18px;
      font-weight: 700;
      /* color: rgba(0, 0, 0, 0.85); */
      padding-left: 10px;
    }

    .info-auth-content p:nth-of-type(2) {
      /* color: rgba(0, 0, 0, 0.65); */
      padding-left: 10px;
    }

    .auth {
      color: #E1251B;
      padding: 6px 10px;
    }

    /* color: rgba(0, 0, 0, 0.65) */
  </style>
</head>
<!--尽量不要在body上添加样式，除了背景色-->

<body>
  <div class="information-details">
    <!--具体代码-->

    <!-- 头部 -->
    <div class="info-detail-header">
      <div class="header-left">
        <img src="../../images/allPic/jiantou.png" alt="" onclick='closeWindow()' class="headerimg">
      </div>
      <div class="header-title">
        <!-- 我是文章的主标题哈哈哈哈哈 -->
      </div>
      <div class="header-right flex-row">
        <div class="flex-row justify-content-end" style="width:0.5rem; margin-right: 10px;" onclick="report()">
          <img style="height:0.4rem;width:0.4rem;" src="../../images/jubao.jpg" />
        </div>
        <div class=" flex-row justify-content-end" onclick="fontChangeShow()" style="width:0.5rem;">
          <img class="info-detail-zt mr10" src="../../images/details/info-detail-zt.png" />
        </div>
        <div class="info-detail-play-area flex-column align-items-center" style="width:1rem;display:none">
          <div class="pos-r" style="left: -0.1rem">
            <div class="info-detail-no-play">
              <img class="info-detail-erji" src="../../images/details/info-detail-erji.png">
              <img class="pos-a" src="../../images/details/info-detail-yp.png"
                style="height:10px;width:18px;top: -0.15rem;left: 0.16rem;" />
            </div>
            <div class="info-detail-no-play" style="display: none">
              <div class="flex-column align-items-center justify-content-center"
                style="height: 16px;width: 16px;background-color: #C7000B;border-radius: 20rem;">
                <img style="height:8px;width:8px;" src="../../images/allPic/yibofang.gif" />
              </div>
            </div>
          </div>
        </div>
        <div class="flex-row" style="width: 0.5rem;">
          <img src="../../images/allPic/fenxiang.png" alt="" onclick="goShare()" class="headerimg1">
        </div>
      </div>
    </div>

    <!-- 内容 -->
    <div class="fixed-content">
      <div class="info-detail-content">
        <div class="partOne">
        </div>

        <div class="partThree">
          <!-- <div class="info-detail-content-title">
                <span>出手了！白宫为抗疫寻求超一万亿美元经济刺激计划</span>
            </div>

            <div class="info-detail-content-subtitle">
              <span>罗韩 彭阳 </span><span></span>·<span>10分钟前</span>
            </div> -->
        </div>

        <div class="info-detail-content-littleIcon">
          <!-- <div class="litterIcon-box">
              <span class="litterIcon-box-span1">医药</span>
              <span class="litterIcon-box-span2">+1.41%</span>
              <span class="litterIcon-box-span3">
                <img src="../../images/allPic/sanjiao.png" alt="">
              </span>
            </div> -->
          <div class="iconBox1 active">

          </div>
          <div class="seeAllIcon" onclick="seeAll()">
            <!-- <span>展开</span> -->
          </div>
        </div>

        <div class="partTwo">
          <!-- <div class="info-detail-content-music">
                <div class="info-detail-content-music-title">出手了！白宫为抗疫寻求超一万亿美元经济刺激计划</div>
                <div class="info-detail-content-music-load">
                  <span class="beginTime">00:00</span>
                  <span class="endTime">15:27</span>
                </div>
                <div class="info-detail-content-music-play">
                  <div class="info-detail-content-music-play-pic">
                    <img src="../../images/details/三角形@2x.png" alt="">
                  </div>
                </div>
            </div>

            <div class="info-detail-content-sketch">
              <div class="info-detail-content-sketch-content">
                医药行业在疫情和创新等多重因素影响之下，将拥有较好机会。
              </div>
            </div>

            <div class="info-detail-content-maintext1">
            </div>

            <div class="info-detail-content-lastText">
              声明：文章内容仅供参考，不构成投资建议。投资者据此操作，风险自担。
            </div>

            <div class="info-detail-content-footer">
              <div class="info-detail-content-footer-praise">
                <div class="info-detail-content-footer-praise-box" onclick='changePriase()'>
                  <div class="box1">
                    <img src="../../images/details/dianzan-3@2x.png" alt="" class="img1">
                    <img src="../../images/interaction/编组 12.png" alt="" class="img2">
                  </div>
                  <div class="box2">666</div>
                </div>
              </div>

              <div class="info-detail-content-footer-desc">
                好文章，需要你的鼓励
              </div>

              <div class="info-detail-content-footer-pic">
                <div class="pic1 pic">
                  <img src="../../images/details/形状结合@2x.png" alt="">
                </div>
                <div class="pic2 pic">
                  <img src="../../images/details/weixin@2x.png" alt="">
                </div>
                <div class="pic3 pic">
                  <img src="../../images/details/weibo@2x.png" alt="">
                </div>
              </div>
            </div> -->
        </div>
        <div class="partThere"></div>
      </div>

      <!-- 留白 -->
      <div class="info-detail-blank"></div>

      <!-- 相关推荐 -->
      <div class="info-detail-recommend">
        <div class="info-detail-recommend-title">相关推荐</div>
        <div class="info-detail-recommend-content">
          <ul>
          </ul>
        </div>
      </div>

      <!-- 留白 -->
      <div class="info-detail-blank"></div>

      <!-- 评论 -->
      <div class="info-detail-comment">
        <div class="info-detail-comment-title">
        </div>
        <div class="info-detail-comment-content">
          <ul>
          </ul>
        </div>
      </div>
    </div>

    <!-- 底部 -->
    <div class="info-detail-footer level1">
      <div class="footer-input-wrap">
        <input type="text" placeholder="" class="commentInpt">
        <div id="faceIconWrap" class="face-icon-wrap">
          <img class="face-icon" src="../../images/zixun/qing-icon.png" alt="">
        </div>
      </div>
      <div style='display:flex;vertical-align: middle;' class="mainfooter">
      </div>
    </div>

    <!-- ActionSheet 组件 -->
    <div id="commentActionSheet" class="comment-action-sheet" style="display: none;">
      <div class="action-sheet-overlay"></div>
      <div class="action-sheet-content">
        <div class="action-sheet-actions">
          <div class="action-sheet-item" id="actionCopy">
            <span>复制</span>
          </div>
          <div class="action-sheet-item" id="actionReply">
            <span>回复</span>
          </div>
          <div class="action-sheet-item" id="actionDelete" style="display: none;">
            <span>删除</span>
          </div>
        </div>
        <div class="action-sheet-gap"></div>
        <div class="action-sheet-cancel" id="actionCancel">
          <span>取消</span>
        </div>
      </div>
    </div>

    <!-- 删除确认弹窗 -->
    <div id="deleteConfirmModal" class="delete-confirm-modal" style="display: none;">
      <div class="modal-overlay"></div>
      <div class="modal-content">
        <div class="modal-title">提示</div>
        <div class="modal-message">确定要删除这条评论吗？</div>
        <div class="modal-actions">
          <div class="modal-btn modal-cancel" id="deleteCancel">取消</div>
          <div class="modal-btn modal-confirm" id="deleteConfirm">确定</div>
        </div>
      </div>
    </div>

    <!-- 表情选择器 -->
    <div class="emoji-panel" id="emojiPanel" style="display: none;">
      <div class="emoji-container">
        <div class="emoji-grid">
          <!-- 表情将通过JavaScript动态生成 -->
        </div>
      </div>
    </div>

    <div class="info-detail-font-change pos-f flex-column justify-content-end fs15" style="display:none;">
      <div class="info-detail-font-area">
        <div class="info-detail-font-content flex-row align-items-center justify-content-between pos-r">
          <div class="info-detail-font-xz info-detail-font-xz1 flex-column  justify-content-center pos-r"
            style="width:2.19rem;height:1rem;">
            <div class="info-detail-font-normal"></div>
            <div class="mt12 pos-r" style="left:-0.15rem">正常</div>
            <div class="pos-a info-detail-font-shortline"></div>
          </div>
          <div
            class="info-detail-font-xz info-detail-font-xz2 flex-column justify-content-center align-items-center pos-r"
            style="width:2.2rem;height:1rem;">
            <div class="info-detail-font-normal"></div>
            <div class="mt12">中</div>
            <div class="pos-a info-detail-font-shortline"></div>
          </div>
          <div class="info-detail-font-xz info-detail-font-xz3 flex-column justify-content-center align-items-end pos-r"
            style="width:2.19rem;height:1rem;">
            <div class="info-detail-font-normal"></div>
            <div class="mt12 pos-r" style="right: -0.15rem">大</div>
            <div class="pos-a info-detail-font-shortline"></div>
          </div>
          <div class="info-detail-font-dot  pos-a"></div>
        </div>
        <div class="info-detail-font-mask"></div>
        <div class="fs16 info-detail-font-sure flex-column align-items-center justify-content-center">
          完成
        </div>
      </div>
    </div>
  </div>
</body>
<!--下面五个文件为固定引用，自己根据情况调整路径，不要跟换引入顺序，其他引用添加在后面-->
<script src="../../js/dict.js"></script>
<script src="../../js/jquery-3.4.1.min.js"></script>
<script src="../../js/checkJsBridge.js"></script>
<script src="../../js/utils.js"></script>
<script src="../../js/api.js"></script>
<script src="../../js/icon-font.js"></script>
<!--protobuf-->
<script src="../../js/protobuf.min.js"></script>
<script src="../../js/proto.js"></script>
<script src="../../js/dayjs.js"></script>
<!-- <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script> -->
<!--固定引用结束-->
<!--避免一个页面包含过多功能，减少js重绘页面，推荐分功能，分页面-->
<script>
  // var vConsole = new VConsole()
  let level = 1 // 1:一级评论 2:二级评论
  let commentObjectId // infoID
  let funcCode
  let isopencomment
  let infoType
  let token
  //分享的标题和主题内容和图片
  let shareImgUrl // 资讯分享图
  let sharetitle
  let sharecontent
  let shareimg
  let templateId
  let templateShareUrl // 画报路径
  //初始关注状态
  let followStatus
  let pageNum = 1
  //音频初始状态
  let vedioStatus = '0'
  //是否可评论
  let isComment = ''
  // 存储股票关键词
  let rateList = []
  //涨跌幅的结果
  let result
  // 作者简介
  let characterDesc
  let fontZoom = 'normal' // 控制字体 big、大  normal、正常  middle、中
  let isFontBig = 0 // 临时的字体的 0、正常 1、中 2、大  临时的字体的正常、大的标志位 false、正常  true 大
  let greyType = 0 //控制点赞是否隐藏
  let currentOrderType = 1 // 当前评论排序类型，1为最新，2为最热

  // 时间格式化函数
  function formatTimeDisplay(timestamp) {
    const now = dayjs()
    const targetTime = dayjs(timestamp * 1000)
    const diffInMinutes = now.diff(targetTime, 'minute')
    const diffInHours = now.diff(targetTime, 'hour')
    const diffInDays = now.diff(targetTime, 'day')

    // 1小时内显示XX分钟前
    if (diffInMinutes < 60) {
      return diffInMinutes <= 0 ? '刚刚' : `${diffInMinutes}分钟前`
    }

    // 24小时内显示XX小时前
    if (diffInHours < 24) {
      return `${diffInHours}小时前`
    }

    // 24-48小时内显示昨天XX时XX分
    if (diffInDays === 1) {
      return `昨天${targetTime.format('HH时mm分')}`
    }

    // 当年的日期显示月/日/时/分
    if (targetTime.year() === now.year()) {
      return targetTime.format('MM-DD HH:mm')
    }

    // 往年的日期显示年/月/日/时/分
    return targetTime.format('YYYY-MM-DD HH:mm')
  }

  /*固定页面初始化方法，用于替代$(function(){}),param为url参数，Object类型*/
  function initPage(params) {
    commentObjectId = params.infoId
    infoType = params.infoType
    funcCode = params.funcCode
    greyType = params.greyType

    //设置深色模式
    if (configColorType === '1') {
      $('.headerimg').attr('src', '../../images/allPic/blackfanhui.png')
      $('.headerimg1').attr('src', '../../images/allPic/blackfenxiang.png')
      $('.info-detail-zt').attr('src', '../../images/details/info-detail-zts.png')
      $('.info-detail-erji').attr('src', '../../images/details/info-detail-erjis.png')
      bridgeUtils.loadCss('../../css/theme/default/black.css')
    } else {
      bridgeUtils.loadCss('../../css/theme/white/white.css')
      $('.headerimg').attr('src', '../../images/allPic/jiantou.png')
      $('.headerimg1').attr('src', '../../images/allPic/fenxiang.png')
      $('.info-detail-zt').attr('src', '../../images/details/info-detail-zt.png')
      $('.info-detail-erji').attr('src', '../../images/details/info-detail-erji.png')
    }

    if (params.isopencomment) {
      isopencomment = params.isopencomment
    } else {
      isopencomment = '0'
    }
    getinfoDetail(params)
    getRecommentList(params)
    $('.info-detail-comment-content ul').empty()
    footerStatus(params)
    // getcomment({'infoId':params.infoId,'pageNum':pageNum})
    //页面加载获取token用于判断是否可以评论或者点赞
    jsBridge.getData('token').then(res => {
      token = res
      // token = 'c7f85d22553af1237bb7f4c5f2416f07'
    })
    setTimeout(function () {
      //获取音频初始状态
      jsBridge.getPlayingItem().then(res => {
        let id = res.id
        if (id && id === params.infoId) {
          $('#yiplay').show()
          $('#noplay').hide()
          $('.info-detail-no-play').hide()
          $('.info-detail-no-play').eq(1).show()
        } else {
          $('#yiplay').hide()
          $('#noplay').show()
          $('.info-detail-no-play').hide()
          $('.info-detail-no-play').eq(0).show()
        }
      })
    }, 500)
    getInformationCnt()
  }

  /*页面所在窗口由后台前台时触发的方法,param为url参数，Object类型*/
  function startPage(params) {


  }

  function reLoadPage(params) {
    jsBridge.getData('token').then(res => {
      token = res
      // token = '3de7dae4593ccf0d86b0a6230fb23e99'
    })
    $('.info-detail-comment-content ul').empty()
    getRecommentList({ 'funcCode': funcCode, 'infoId': commentObjectId })
    pageNum = 1
    getcomment({ 'infoId': commentObjectId, 'pageNum': pageNum, 'orderType': 1 })
  }
  // 获取生成的画报图片地址
  function getshareUrl(params) {
    Server.shareUrl.getShareUrl({
      'infoId': params.infoId,
      'templateId': params.templateId ? params.templateId : '1'
    }).then(res => {
      templateShareUrl = res.data.url
    })
  }
  function formatReadCount(readTempCnt) {
    const num = parseFloat(readTempCnt);
    if (num === '' || num === null || num === undefined) return
    if (num < 1000) {
      return num.toFixed(0)
    } else if (num < 10000) {
      return (num / 1000).toFixed(1) + "K+"
    } else {
      return (num / 10000).toFixed(1) + "W+"
    }
  }
  //获取资讯详情页面
  function getinfoDetail(params) {
    Server.realTimeInfo.getInfoDetails({ 'infoId': params.infoId, 'infoType': params.infoType }).then(res => {
      //   let res = {'code':0,'data':{'infoId':'25b3b2ccf6f22f41c6f81baf66c1bba3','mainTitle':'万通液压董事长王万法：打造一流液压领域长青企业','subheadTitle':'','funcCode':'004005','infoType':'1','readCnt':11,'coverImgUrl':'https://storage.360buyimg.com/ifis/zzb/jpeg/68d60d40-1cf2-4414-a4a7-8c1108cec863.jpeg','issuerDttm':1621394756,'keyWords':'[{"type-url":"5:/shares/performanceForecast","key":"净利润"},{"type-url":"5:/industry/downStream?name=Car","key":"乘用车"},{"type-url":"6:000039.SZ.S.中集集团","key":"中集集团"},{"type-url":"5:/industry/downStream?name=Car","key":"汽车"},{"type-url":"1:CHAIN_DOME_Energyvehicles?profCode=DQSB","key":"新能源汽车"}]','createUserName':'崔小粟','trailContent':'新三板精选层公司万通液压董事长王万法近日接受中国证券报记者采访时表示，作为自卸车、采掘设备、工程机械及高端乘用车的关键零部件，油气弹簧等液压元件市场空间巨大，新能源汽车行业快速发展将为公司带来新的增长点。','content':'<p class="hsyylwzlfont20">新三板精选层公司万通液压董事长王万法近日接受中国证券报记者采访时表示，作为自卸车、采掘设备、工程机械及高端乘用车的关键零部件，油气弹簧等液压元件市场空间巨大，新能源汽车行业快速发展将为公司带来新的增长点。</p><p><strong>增强盈利能力</strong></p><p><span style="font-size: 36px;">万</span>通液压专业从事液压油缸的研发、生产和销售，主要产品包括自卸车专用油缸、机械装备用油缸和油气弹簧，广泛应用于汽车、采掘设备、工程机械、军工装备等领域。通过多年研发积累及生产实践，万通液压已掌握冷拔工艺技术、密封结构优化技术、活塞杆热处理及表面处理技术、镜面抛光粗糙度控制技术、双气室蓄能器技术等核心技术，是国内竞争实力较强的中高压油缸专业供应商。</p><p>近年来，万通液压经营业绩稳步增长。2020年，公司营业收入同比略有增长。得益于产品结构优化调整、高毛利产品收入占比提升，叠加精细化管理降本，公司实现净利润6041.35万元，同比增长47.88%，产品毛利率同比增加3.22个百分点，费用率同比下降1.36个百分点。资产负债率逐年降低，公司盈利能力持续稳定，且偿债能力不断增强。</p><p>自卸车专用油缸是公司三大核心产品之一，主要用于自卸车的液压举升系统，是自卸车的主要配件之一。经过多年的技术沉淀与经验积累，公司掌握了自卸车倒装前顶缸技术、前顶缸轻量化技术等核心技术。与行业主流技术相比，公司在原材料及能源消耗、生产效率、功能等指标上具备一定优势，主要服务客户为宏昌专用车、河南骏通、中集集团等行业龙头企业。</p><p>王万法称，近年来，自卸车专用油缸业务持续为公司贡献收入及现金流，支持公司不断开拓业务。2020年，自卸车专用油缸业务实现销售收入1.65亿元，同比增长20%，占总营业收入的比例为51.78%，毛利率为25.88%，同比增长1.87个百分点。经历了2019年开始的“大吨小标”和超载超限从严治理，非合规产品无法上牌，大量用户由2019年的观望逐步转向合规自卸车产品，进一步刺激了自卸车市场销量增长。</p><p>方得网行情分析数据显示，2021年自卸车行情乐观，促进区域协调发展重大工程，推进“两新一重”建设，实施一批交通、能源、水利等领域的重大工程项目，这些因素将进一步扩大工程自卸车市场需求。</p><p>王万法表示，随着产品结构的优化调整，公司抵御行业周期的能力不断增强。募投项目顺利实施后，公司油气弹簧产品产能得到提升，同时开发新产品挖掘机油缸，公司盈利能力将进一步增强。</p><p><strong>进入精选层</strong></p><p>万通液压于2014年7月挂牌新三板。2020年11月，公司成功进入精选层，自此进入到一个更加广阔、更高层次的发展平台。</p><p>2020年，公司成功完成向不特定合格投资者公开发行股票，全额行使超额配售选择权后，共发行股票1610万股，募集资金总额1.288亿元。扣除发行费用后，募集资金净额为1.169亿元。截至报告期末，已按规定用途累计投入募集资金总额3654万元，尚未使用的募集资金已按规定进行专户存储，未来将继续投入相关募投项目。</p><p>王万法表示，进入精选层是万通液压发展的里程碑。本次募集资金投资项目的顺利实施，将进一步增强公司的自主创新能力，提高市场竞争力。公司将继续坚持以主营业务为重心，抓住行业发展机遇，巩固核心竞争优势，借助资本市场的力量，把企业不断做大做强。</p><p>在产品创新方面，王万法介绍，公司始终将技术研发作为核心竞争力，围绕液压主业持续研发投入，开展新技术、新产品、新工艺的研究，建立了由自主创新与产学研合作创新共同组成的研发体系。</p><p>2020年，公司投入参与研发项目7项。其中，3项已经结项，4项仍在进行中，研发费用率为4.41%。公司投入参与的研发项目主要包括核心产品油气弹簧的综合研发、对拓展液压油缸不同应用领域的技术开发和产业化研究以及高压油缸的性能深度研发，研发项目与公司整体发展战略高度吻合，有力地支持公司深耕现有市场，并对新产品进行开拓。</p><p><strong>扩大品牌知名度</strong></p><p>近年来，新能源汽车产业快速发展，逐渐走入千家万户。新能源汽车产业发展对公司有何影响？王万法表示，液压行业迎来新的发展机遇。油气弹簧等液压元件作为自卸车、采掘设备、工程机械及高端乘用车的关键零部件，市场需求巨大，新能源汽车行业发展将为公司带来新的增长点。</p><p>王万法指出，油气弹簧等液压产品可应用于非公路宽体自卸车（矿用车）等新能源商用车及新能源乘用车。未来，公司将随着市场对液压产品数量、品种的要求对公司各类产品进行不断优化、提升。</p><p>对于公司当前面临哪些挑战，王万法表示，相比国际领先公司，公司现有的生产能力、销售规模、从业人数、市场影响力等均有待提升。募投项目实施投产后，公司产能将得到有效提升，为公司进一步巩固并扩大市场份额打下坚实基础。</p><p>同时，公司处于技术密集型行业，需要高度重视新产品、新工艺的研发，为企业长远可持续发展保持竞争优势。公司需要持续引进高端研发人才，完善研发队伍，进一步增强研发实力。目前，公司高端技术人才相对不足，进入精选层使得公司知名度扩大，为充实高端人才队伍提供了有利条件。</p><p>王万法表示，公司将继续以“做国内一流液压领域长青企业”为发展愿景，以“关注客户需求，为员工、客户、股东、社会创造价值”为使命，以“技术领导行业，品质铸造未来，品牌带动发展，管理成就员工”为努力方向，在2020年经营业绩基础上，2021年度力争实现营业收入同比快速增长。</p><p>“在巩固现有产品市场地位的同时，将全面布局军工、工程机械两大领域，着力突破油气弹簧、挖掘机油缸两大产品，加快在工程机械和军工市场扩张，扩大品牌知名度。”王万法说。</p><p><br/></p>','newContent':'<p class="hsyylwzlfont20">新三板精选层公司万通液压董事长王万法近日接受中国证券报记者采访时表示，作为自卸车、采掘设备、工程机械及高端乘用车的关键零部件，油气弹簧等液压元件市场空间巨大，新能源汽车行业快速发展将为公司带来新的增长点。</p><p><strong>增强盈利能力</strong></p><p><span style="font-size: 36px;">万</span>通液压专业从事液压油缸的研发、生产和销售，主要产品包括自卸车专用油缸、机械装备用油缸和油气弹簧，广泛应用于汽车、采掘设备、工程机械、军工装备等领域。通过多年研发积累及生产实践，万通液压已掌握冷拔工艺技术、密封结构优化技术、活塞杆热处理及表面处理技术、镜面抛光粗糙度控制技术、双气室蓄能器技术等核心技术，是国内竞争实力较强的中高压油缸专业供应商。</p><p>近年来，万通液压经营业绩稳步增长。2020年，公司营业收入同比略有增长。得益于产品结构优化调整、高毛利产品收入占比提升，叠加精细化管理降本，公司实现净利润6041.35万元，同比增长47.88%，产品毛利率同比增加3.22个百分点，费用率同比下降1.36个百分点。资产负债率逐年降低，公司盈利能力持续稳定，且偿债能力不断增强。</p><p>自卸车专用油缸是公司三大核心产品之一，主要用于自卸车的液压举升系统，是自卸车的主要配件之一。经过多年的技术沉淀与经验积累，公司掌握了自卸车倒装前顶缸技术、前顶缸轻量化技术等核心技术。与行业主流技术相比，公司在原材料及能源消耗、生产效率、功能等指标上具备一定优势，主要服务客户为宏昌专用车、河南骏通、中集集团等行业龙头企业。</p><p>王万法称，近年来，自卸车专用油缸业务持续为公司贡献收入及现金流，支持公司不断开拓业务。2020年，自卸车专用油缸业务实现销售收入1.65亿元，同比增长20%，占总营业收入的比例为51.78%，毛利率为25.88%，同比增长1.87个百分点。经历了2019年开始的“大吨小标”和超载超限从严治理，非合规产品无法上牌，大量用户由2019年的观望逐步转向合规自卸车产品，进一步刺激了自卸车市场销量增长。</p><p>方得网行情分析数据显示，2021年自卸车行情乐观，促进区域协调发展重大工程，推进“两新一重”建设，实施一批交通、能源、水利等领域的重大工程项目，这些因素将进一步扩大工程自卸车市场需求。</p><p>王万法表示，随着产品结构的优化调整，公司抵御行业周期的能力不断增强。募投项目顺利实施后，公司油气弹簧产品产能得到提升，同时开发新产品挖掘机油缸，公司盈利能力将进一步增强。</p><p><strong>进入精选层</strong></p><p>万通液压于2014年7月挂牌新三板。2020年11月，公司成功进入精选层，自此进入到一个更加广阔、更高层次的发展平台。</p><p>2020年，公司成功完成向不特定合格投资者公开发行股票，全额行使超额配售选择权后，共发行股票1610万股，募集资金总额1.288亿元。扣除发行费用后，募集资金净额为1.169亿元。截至报告期末，已按规定用途累计投入募集资金总额3654万元，尚未使用的募集资金已按规定进行专户存储，未来将继续投入相关募投项目。</p><p>王万法表示，进入精选层是万通液压发展的里程碑。本次募集资金投资项目的顺利实施，将进一步增强公司的自主创新能力，提高市场竞争力。公司将继续坚持以主营业务为重心，抓住行业发展机遇，巩固核心竞争优势，借助资本市场的力量，把企业不断做大做强。</p><p>在产品创新方面，王万法介绍，公司始终将技术研发作为核心竞争力，围绕液压主业持续研发投入，开展新技术、新产品、新工艺的研究，建立了由自主创新与产学研合作创新共同组成的研发体系。</p><p>2020年，公司投入参与研发项目7项。其中，3项已经结项，4项仍在进行中，研发费用率为4.41%。公司投入参与的研发项目主要包括核心产品油气弹簧的综合研发、对拓展液压油缸不同应用领域的技术开发和产业化研究以及高压油缸的性能深度研发，研发项目与公司整体发展战略高度吻合，有力地支持公司深耕现有市场，并对新产品进行开拓。</p><p><strong>扩大品牌知名度</strong></p><p>近年来，新能源汽车产业快速发展，逐渐走入千家万户。新能源汽车产业发展对公司有何影响？王万法表示，液压行业迎来新的发展机遇。油气弹簧等液压元件作为自卸车、采掘设备、工程机械及高端乘用车的关键零部件，市场需求巨大，新能源汽车行业发展将为公司带来新的增长点。</p><p>王万法指出，油气弹簧等液压产品可应用于非公路宽体自卸车（矿用车）等新能源商用车及新能源乘用车。未来，公司将随着市场对液压产品数量、品种的要求对公司各类产品进行不断优化、提升。</p><p>对于公司当前面临哪些挑战，王万法表示，相比国际领先公司，公司现有的生产能力、销售规模、从业人数、市场影响力等均有待提升。募投项目实施投产后，公司产能将得到有效提升，为公司进一步巩固并扩大市场份额打下坚实基础。</p><p>同时，公司处于技术密集型行业，需要高度重视新产品、新工艺的研发，为企业长远可持续发展保持竞争优势。公司需要持续引进高端研发人才，完善研发队伍，进一步增强研发实力。目前，公司高端技术人才相对不足，进入精选层使得公司知名度扩大，为充实高端人才队伍提供了有利条件。</p><p>王万法表示，公司将继续以“做国内一流液压领域长青企业”为发展愿景，以“关注客户需求，为员工、客户、股东、社会创造价值”为使命，以“技术领导行业，品质铸造未来，品牌带动发展，管理成就员工”为努力方向，在2020年经营业绩基础上，2021年度力争实现营业收入同比快速增长。</p><p>“在巩固现有产品市场地位的同时，将全面布局军工、工程机械两大领域，着力突破油气弹簧、挖掘机油缸两大产品，加快在工程机械和军工市场扩张，扩大品牌知名度。”王万法说。</p><p><br/></p>','voiceUrl':'https://storage.360buyimg.com/ifis/zzb/wav/8663139f-e733-446c-953f-efc13678265e.wav','thumbsupCnt':0,'collectionCnt':0,'followCnt':0,'topicName':'','detailImgUrl':'','followStatus':'0','thumbsupStatus':'0','collectionStatus':'0','characterName':'崔小粟','isComment':'0'},'resultCode':'1','resultMsg':'查询成功'}
      $('.partOne').empty()
      $('.partTwo').empty()
      $('.partThere').empty()
      $('.partThree').empty()
      $('.mainfooter').empty()
      $('.iconBox1').empty()
      $('.seeAllIcon').empty()
      // alert(JSON.stringify(res.data.newContent))
      if (res.code === 0) {
        //分享标题和对应的内容
        sharetitle = res.data.mainTitle
        templateId = res.data.templateId
        // console.log('获取infoID:', params, templateId)
        //去掉富文本带过来的&nbsp,避免分享的时候出现
        sharecontent = res.data.trailContent.replace(/&nbsp;/g, '')
        // alert(sharecontent)
        shareimg = res.data.coverImgUrl
        shareImgUrl = res.data.shareImgUrl
        //刷新原生页面的阅读数
        let readCount = res.data.readCnt
        jsBridge.updateStatus({ 'type': 'zixun', 'name': 'read', 'infoId': commentObjectId, 'value': readCount })
        //刷新H5得资讯列表页面
        jsBridge.updateStatus({ 'type': 'refresh', 'name': 'refresh', 'infoId': commentObjectId, 'value': '2' })
        //判断是否可评论,即是否显示评论列表
        isComment = res.data.isComment
        if (isComment === '0') {
          // return false
          $('.info-detail-comment-title').hide()
          $('.commentInpt').attr('disabled', true)
          $('.commentInpt').attr('placeholder', '暂不支持评论')
        } else {
          $('.commentInpt').attr('placeholder', '说说你的看法...')
          getcomment({ 'infoId': commentObjectId, 'pageNum': pageNum, 'orderType': 1 })
        }
        let data = res.data
        let funcCode = res.data.funcCode

        //关注状态单独获取需要拿到详情里面的funcCode来获取初始关注状态
        Server.realTimeInfo.getFollow({ 'followObjectId': funcCode, 'objectSource': '6' }).then(res => {
          if (res.code === 0) {
            followStatus = res.data.code
            let partOne =
              `<div class="info-detail-content-top" style="display:${data.topicName ? 'block' : 'none'}">
                    <div class="info-detail-content-top-left">
                        <div class="imgBox">
                              <img src="${data.detailImgUrl}" alt="">
                        </div>
                        <div class="titleBox">
                            <div>${data.topicName}</div>
                            <div><span class='followCnt'>${data.followCnt}</span>关注</div>
                        </div>
                    </div>
                    <div class="followBox">
                      <div class="info-detail-content-top-right" data-status='1' style="display:${followStatus === '0' ? 'block' : 'none'}" onclick="follow({'follow_object_id':'${data.funcCode}','status':'${followStatus === '0' ? '1' : '0'}'},this)">
                          <span>关注</span>
                      </div>
                      <div class="info-detail-content-top-right active" data-status='0'  style="display:${followStatus === '1' ? 'block' : 'none'}" onclick="follow({'follow_object_id':'${data.funcCode}','status':'${followStatus === '0' ? '1' : '0'}'},this)">
                          <span>已关注</span>
                      </div>
                    </div>
                </div>`
            $('.partOne').append(partOne)
          } else if (res.code === -8) {
            let partOne =
              `<div class="info-detail-content-top" style="display:${data.topicName === '' ? 'none' : 'block'}">
                    <div class="info-detail-content-top-left">
                        <div class="imgBox">
                              <img src="${data.detailImgUrl}" alt="">
                        </div>
                        <div class="titleBox">
                            <div>${data.topicName}</div>
                            <div><span class='followCnt'>${data.followCnt}</span>关注</div>
                        </div>
                    </div>
                    <div class="followBox">
                      <div class="info-detail-content-top-right"  onclick="follow({'follow_object_id':'${data.funcCode}','status':'1'},this)">
                        <span>关注</span>
                      </div>
                    </div>
                </div>`
            $('.partOne').append(partOne)
          } else {
            // jsBridge.toast('数据异常')
          }
        })

        //修改时间
        let creatTime = data.issuerDttm * 1000
        let nowTime = +new Date().valueOf()
        let year = new Date(creatTime).getFullYear()
        let month = new Date(creatTime).getMonth() + 1 < 10 ? '0' + (new Date(creatTime).getMonth() + 1) : new Date(creatTime).getMonth() + 1
        let day = new Date(creatTime).getDate() < 10 ? '0' + new Date(creatTime).getDate() : new Date(creatTime).getDate()
        let hour = new Date(creatTime).getHours() < 10 ? '0' + new Date(creatTime).getHours() : new Date(creatTime).getHours()
        let minute = new Date(creatTime).getMinutes() < 10 ? '0' + new Date(creatTime).getMinutes() : new Date(creatTime).getMinutes()
        if (nowTime - creatTime < 30 * 60 * 1000) {
          if (nowTime - creatTime < 1 * 60 * 1000) {
            data.issuerDttm = '刚刚'
          } else {
            data.issuerDttm = parseInt((nowTime - creatTime) / 1000 / 60) + '分钟前'
          }
        } else if (nowTime - creatTime < 24 * 60 * 60 * 1000) {
          if (nowTime - creatTime < 60 * 60 * 1000) {
            data.issuerDttm = '1小时前'
          } else {
            data.issuerDttm = parseInt((nowTime - creatTime) / 1000 / 60 / 60) + '小时前'
          }
        } else if (new Date().getDate() - new Date(creatTime).getDate() == 1 && new Date().getMonth() == new Date(creatTime).getMonth() && new Date().getFullYear() == new Date(creatTime).getFullYear()) {
          data.issuerDttm = '昨天' + hour + ':' + minute
        } else {
          data.issuerDttm = year + '-' + month + '-' + day + ' ' + hour + ':' + minute
        }
        // 下一期加上
        // <span style="display:${window.systemConfig.readCntSwitch ? 'block' : 'none'}>${formatReadCount(data.readCnt)}阅读</span>
        let partThree =
          `<div class="info-detail-content-title">
              <span>${data.mainTitle}</span>
        </div>

        <div class="info-detail-content-subtitle">
          <span>${data.createUserName}</span>
          <span>${data.issuerDttm}</span>
        </div>`

        let partTwo =
          `<div class="info-detail-content-music" style="display: none">
            <div class="info-detail-content-music-title">${data.mainTitle}</div>
            <div class="info-detail-content-music-play">
              <div class="info-detail-content-music-play-pic" data-status='0' id="noplay" style="display:${vedioStatus === '0' ? 'block' : 'none'}" onclick="playvioce({'voiceUrl':'${data.voiceUrl}','mainTitle':'${data.mainTitle}','infoType':'${data.infoType}','infoId':'${data.infoId}','coverImgUrl':'${data.coverImgUrl}'},this)">
                <img src="../../images/allPic/zixunbofang.png" alt="">
              </div>
              <div class="info-detail-content-music-play-pic" data-status='1' id="yiplay" style="display:${vedioStatus === '0' ? 'none' : 'block'}" onclick="ztplayvioce({'voiceUrl':'${data.voiceUrl}','mainTitle':'${data.mainTitle}','infoType':'${data.infoType}','infoId':'${data.infoId}','coverImgUrl':'${data.coverImgUrl}'},this)">
                <img src="../../images/allPic/yibofang.gif" alt="">
              </div>
            </div>
        </div>

        <div class="info-detail-content-sketch" style="display:none">
          <div class="info-detail-content-sketch-content">
            ${data.trailContent}
          </div>
        </div>

        <div class="info-detail-content-maintext1 info-detail" id='info-detail'>
          ${data.newContent}
        </div>

        <div class="info-detail-content-lastText">
          声明：文章内容仅供参考，不构成投资建议。投资者据此操作，风险自担。
        </div>

        <div class="info-detail-describe">
          <div class="align-items-start">
            <div class="info-auth-content">
            </div>
          </div>
        </div>`
        let partThere = `<div class="info-detail-content-footer">
          <div class="info-detail-content-footer-praise">
            <div class="info-detail-content-footer-praise-box">
              <div class="box1">
                <img src="${configColorType === '1' ? '../../images/allPic/blackdianzan.png' : '../../images/allPic/nodianzan1.png'}" alt="" data-status='1' class="img1" style="display:${data.thumbsupStatus === '0' ? 'block' : 'none'}" onclick="zxupdatePriase1({'thumbupObjectId':'${data.infoId}','status':'${data.thumbsupStatus === '0' ? '1' : '0'}'},this)">
                <img src="../../images/allPic/yidianzan1.png" alt="" data-status='0' class="img1" style="display:${data.thumbsupStatus === '1' ? 'block' : 'none'}" onclick="zxupdatePriase1({'thumbupObjectId':'${data.infoId}','status':'${data.thumbsupStatus === '1' ? '0' : '1'}'},this)">
              </div>
              <div class="box2">${data.thumbsupCnt}</div>
            </div>
          </div>

          <div class="info-detail-content-footer-desc">
            好文章，需要你的鼓励
          </div>

          <div class="info-detail-content-footer-pic">
            <div class="pic1 pic">
              <img src="${configColorType === '1' ? '../../images/allPic/blackpyq.png' : '../../images/allPic/pengyouquan.png'}" alt="" onclick="sharepyq()">
            </div>
            <div class="pic2 pic">
              <img src="${configColorType === '1' ? '../../images/allPic/blackweixin.png' : '../../images/allPic/weixin@2x.png'}" alt="" onclick="sharewx()">
            </div>
            <div class="pic2 pic">
                <img src="${configColorType === '1' ? '../../images/allPic/dianhuatianchong.png' : '../../images/allPic/dianhuatianchong.png'}" alt="" onclick="report()">
            </div>
            <!--  <div class="pic3 pic">
              <img src="../../images/allPic/weibo@2x.png" alt="">
            </div> -->
          </div>
        </div>`
        let footer =
          `<div class="footer-noconfirm" id='footer-noconfirm'  style="display:${isopencomment === '0' ? 'flex' : 'none'}">
            <div class="collect">
              <img src="../../images/zixun/collect-icon.png" alt="" data-status='0' style="display:${data.collectionStatus === '0' ? 'block' : 'none'}" onclick="updateCollect({'collectionObjectId':'${data.infoId}','status':'1'},this)">

              <img src="../../images/zixun/no-collect-icon.png" alt="" data-status='1' style="display:${data.collectionStatus === '1' ? 'block' : 'none'}" onclick="updateCollect({'collectionObjectId':'${data.infoId}','status':'0'},this)">
              <span class="footer-number">${Utils.formatNumber(data.collectionCnt)}</span>
            </div>
            <div class="praise">
              <img src="../../images/zixun/zan-icon.png" alt="" data-status='0' style="display:${data.thumbsupStatus === '0' ? 'block' : 'none'}" onclick="zxupdatePriase2({'thumbupObjectId':'${data.infoId}','status':'${data.thumbsupStatus === '0' ? '1' : '0'}'},this)">
              <img src="../../images/zixun/no-zan-icon.png" alt="" data-status='1' style="display:${data.thumbsupStatus === '1' ? 'block' : 'none'}" onclick="zxupdatePriase2({'thumbupObjectId':'${data.infoId}','status':'${data.thumbsupStatus === '1' ? '0' : '1'}'},this)">
              <span class="footer-number">${Utils.formatNumber(data.thumbsupCnt)}</span>
            </div>
             <div class="comment">
              <img src="${configColorType === '1' ? '../../images/zixun/comment-icon.png' : '../../images/zixun/comment-icon.png'}" alt="" onclick="commentFocus()">
              <span class="footer-number-last">${Utils.formatNumber(data.commentCnt)}</span>
            </div>
        </div>
        <div id="faceSendIcon" class="face-icon-wrap-bottom" onclick="toggleEmojiPanel()" style="display:${isopencomment === '0' ? 'none' : 'block'};padding-left:0.2rem;" >
          <img class="face-icon" src="../../images/zixun/qing-icon.png" alt="">
        </div>
        <div class="footer-confirm" id='footer-confirm' style="display:${isopencomment === '0' ? 'none' : 'block'};padding-left:0.26rem;" onclick="sendcomment()">发送</div>`

        //关键词
        if (res.data.keyWords) {
          let keyWords = JSON.parse(res.data.keyWords)
          if (keyWords.length !== 0) {

            rateList = keyWords.filter((v, i) => {
              return v['type-url'].split(':')[0] === '2' || v['type-url'].split(':')[0] === '6'
            })

            let listContract = {
              listContract: [
                {
                  //exchangeNo: 'SH',
                  //commodityNo: '000001',
                  //commodityType: 'S',
                  //contractNo: '9999'
                }
              ]
            }
            listContract.listContract = []

            //保存需要的数据方便后面的股票跳转渲染
            listArr = []

            rateList.map((v, i) => {
              let it = v['type-url'].split('.')
              let obj = {}
              obj.commodityNo = it[0][0] === '2' ? it[1] : it[0].split(':')[1]
              obj.commodityType = it[2]
              obj.contractNo = '9999'
              obj.exchangeNo = it[0][0] === '2' ? it[0].split(':')[1] : it[1]
              listContract.listContract.push(obj)
              listArr.push(obj)
            })

            const buf = listArr.map(i => `${i.exchangeNo}-${i.commodityNo}`)
            // const buf = protoBuf.encodeToBase64('GetSnapshotRequest', listContract)
            Server.realTimeInfo.getSimpleQuoteUseUniqueCodes({ uniqueCodes: buf }).then(res => {
              // result = protoBuf.decodeFromBase64('GetSnapshotResponse', res.data)

              // result.listSnapshot.map((item, index) => {
              //   //rateList[index].changeRate = item.changeRate ? item.changeRate * 1000000 / 10000 + '%' : '0.00%'
              //   rateList[index].changeRate = item.changeRate ? (item.changeRate * 100).toFixed(2) + '%' : '0.00%'
              // })

              // res.list.map((item, index) => {
              //   // rateList[index].uniqueCode = item.uniqueCode
              //   rateList[index].name = item.name
              //   rateList[index].changeRate = item.dealedRaisePercent
              //   rateList[index].uniqueCode = item.uniqueCode.split('-')[0]
              //   rateList[index].code = item.uniqueCode.split('-')[1]
              // })

              rateList.map(i => {
                res.list.forEach(item => {
                  if (i.key === item.name) {
                    i.name = item.name
                    i.changeRate = item.dealedRaisePercent
                    i.uniqueCode = item.uniqueCode.split('-')[0]
                    i.code = item.uniqueCode.split('-')[1]
                  }
                })
                return { ...i }
              })

              if (rateList.length !== 0) {
                //显示展开按钮和收起按钮
                let openspan = `<span>展开</span>`
                $('.seeAllIcon').append(openspan)
                $('.info-detail-content-littleIcon').css('padding-top', '0.48rem')
              }
              if (rateList.length <= 9) {
                $('.seeAllIcon').hide()
              }
              // $('.seeAllIcon').hide()
              rateList.map((item, index) => {
                let keyWords = ''
                if (item.changeRate) {
                  keyWords =
                    `<div class="litterIcon-box" onclick="gogupiao({'exchange':'${item.uniqueCode}','code':'${item.code}'})">
                              <span class="litterIcon-box-span1">${item.key}</span>
                              <span class="litterIcon-box-span2" style="color:${item.changeRate[0] === '-' ? '#00AE1F' : '#F04D4E'}">${item.changeRate[0] === '-' ? item.changeRate : ('+' + item.changeRate)}</span>
                              <span class="litterIcon-box-span3">
                                <img src="../../images/allPic/sanjiao.png" alt="">
                              </span>
                            </div>`
                }
                $('.iconBox1').append(keyWords)
              })
            })
          }
        }

        // 控制音频区域
        if (data.voiceUrl) {
          $('.info-detail-play-area').show()
          $('.info-detail-no-play').hide()
          $('.info-detail-no-play').eq(0).click(function () {
            playvioce(data)
          })
          $('.info-detail-no-play').eq(1).click(function () {
            ztplayvioce()
          })
          if (vedioStatus === '0') {
            $('.info-detail-no-play').eq(0).show()
          } else {
            $('.info-detail-no-play').eq(1).show()
          }
        }
        $('.partTwo').append(partTwo)
        if (greyType == 0) {
          $('.partThere').append(partThere)
        }
        $('.partThree').append(partThree)
        $('.mainfooter').append(footer)
        authInfo(data)
        if (res.data.templateShareUrl) {
          templateShareUrl = res.data.templateShareUrl // 画报地址
        } else {
          // console.log(res.data, 'res.data')
          getshareUrl(res.data)
        }

        jsBridge.getData('fontChange').then(data => {
          if ('big' === data) {
            // 如果是放大，则字体放大
            fontZoom = 'big'
            fontChange()
          } else if ('middle' === data) {
            fontZoom = 'middle'
            fontChange()
          } else {
            // 字体属于正常
            fontZoom = 'normal'
            fontChange()
          }
          initFont()
        })
        zoomImg()
      } else {
        // jsBridge.toast('数据异常')
      }
    })
  }

  function authInfo(data = {}) {
    const { characterInfos, advertisingUrl } = data
    let auth
    if (characterInfos) {
      characterInfos.forEach(function (ele) {
        if (!auth && ele && ele.characterDesc && ele.email) {
          auth = ele
          return
        }
      })
      if (!auth) { return }
      $('.align-items-start').addClass('info-detail-auth')
      if (auth && auth.coverUrl) {
        $('.info-detail-auth').prepend(`
        <div class="info-auth-photo mr10">
          <img src="${auth.coverUrl}"></img>
        </div>`)
      } else {
        $('.info-detail-auth').prepend(`
        <div class="info-auth-photo mr10">
          <img src="../../images/details/default-auth-photo.png"></img>
        </div>`)
      }
      if (auth && auth.name) {
        $('.info-auth-content').append(`
        <p>
          <span class="auth-name">${auth.name}</span>
        </p>
        <div class="auth">中国证券报·中证金牛座记者</div>
        `)
      }
      if (auth && auth.email) {
        $('.info-auth-content').append(`
        <p class="line1">
            <span>${auth.email}</span>
            <span class="auth-mark">欢迎提供新闻线索</span>
        </p>`)
      }
      if (auth && auth.characterDesc) {
        characterDesc = auth.characterDesc
        $('.info-detail-auth').append(`
        <p>
            <span id='auth-character'>${characterDesc}</span>
        </p>`)
        textLimite(72)
      }
      if (advertisingUrl && advertisingUrl.paramValue && advertisingUrl.paramValue !== '0') {
        $('.info-detail-describe').append(`
        <div class="ta-center advertising">
          <img src="${advertisingUrl.paramValue}"></img>
        </div>`)
      }
    }
  }

  function textLimite(limit) {
    $('#auth-character').each(function () {
      let str = $(this).html()
      let subStr = str.substring(0, limit)
      $(this).html(
        subStr +
        (str.length > limit
          ? '...' + `<a href='javascript:;' class='see-more'>查看更多</a>`
          : '')
      )
    })
    $(document).on('click', '#auth-character', function () {
      if (characterDesc) {
        $('#auth-character').html(characterDesc)
      }
    })
  }

  function zoomImg() {
    let dom = $('.info-detail img')
    for (let i = 0; i < dom.length; i++) {
      dom.eq(i).attr('src', dom.eq(i).attr('src').split('?')[0])
    }
    dom.click(function () {
      let obj = {}
      let fileList = []
      for (let i = 0; i < dom.length; i++) {
        obj = {}
        obj.url = dom.eq(i).attr('src')
        obj.width = dom.eq(i).width()
        obj.height = dom.eq(i).height()
        fileList.push(obj)
      }
      if (!$(this).parent().is('a')) {
        jsBridge.getImgList({ url: $(this).attr('src'), fileList: fileList })
      }
    })
  }

  //获取相关推荐
  function getRecommentList(params) {
    Server.recomendInfo.getRecomentList({ 'funcCode': params.funcCode, 'infoId': params.infoId }).then(res => {
      $('.info-detail-recommend-content ul').empty()
      if (res.code === 0) {
        let list = res.data.list
        if (list.length !== 0 || !list) {
          list.map((item, index) => {
            let creatTime = item.issuerDttm * 1000
            let nowTime = +new Date().valueOf()
            let year = new Date(creatTime).getFullYear()
            let month = new Date(creatTime).getMonth() + 1 < 10 ? '0' + (new Date(creatTime).getMonth() + 1) : new Date(creatTime).getMonth() + 1
            let day = new Date(creatTime).getDate() < 10 ? '0' + new Date(creatTime).getDate() : new Date(creatTime).getDate()
            let hour = new Date(creatTime).getHours() < 10 ? '0' + new Date(creatTime).getHours() : new Date(creatTime).getHours()
            let minute = new Date(creatTime).getMinutes() < 10 ? '0' + new Date(creatTime).getMinutes() : new Date(creatTime).getMinutes()
            if (nowTime - creatTime < 30 * 60 * 1000) {
              if (nowTime - creatTime < 1 * 60 * 1000) {
                item.issuerDttm = '刚刚'
              } else {
                item.issuerDttm = parseInt((nowTime - creatTime) / 1000 / 60) + '分钟前'
              }
            } else if (nowTime - creatTime < 24 * 60 * 60 * 1000) {
              if (nowTime - creatTime < 60 * 60 * 1000) {
                item.issuerDttm = '1小时前'
              } else {
                item.issuerDttm = parseInt((nowTime - creatTime) / 1000 / 60 / 60) + '小时前'
              }
            } else if (new Date().getDate() - new Date(creatTime).getDate() == 1 && new Date().getMonth() == new Date(creatTime).getMonth() && new Date().getFullYear() == new Date(creatTime).getFullYear()) {
              item.issuerDttm = '昨天' + hour + ':' + minute
            } else {
              item.issuerDttm = year + '-' + month + '-' + day + ' ' + hour + ':' + minute
            }
          })

          list.map((v, i) => {
            let li =
              `<li onclick="reloadDetails({'infoId':'${v.infoId}','funcCode':'${v.funcCode}','infoType':'${v.infoType}'})">
                  <div class="content-left">
                    <div class="content-left-main" style="width:${v.coverImgUrl ? '4.52rem' : '100%'}">${v.mainTitle}</div>
                    <div class="content-left-litterText">
                      <span>${v.issuerDttm}</span>
                    </div>
                  </div>
                  <div class="content-right" style="display:${v.coverImgUrl ? 'block' : 'none'}">
                    <img src="${v.coverImgUrl}" alt="" class='content-right-img'>
                  </div>
                </li>
                <li class="solidLi"></li>`

            $('.info-detail-recommend-content ul').append(li)
          })
        } else {
          $('.info-detail-recommend').css('display', 'none')
        }
      } else {
        // jsBridge.toast('数据异常')
      }
    })
  }

  //点击相关推荐获取新的详情数据(刷新页面获取最新的数据)
  function reloadDetails(params) {
    jsBridge.openWindow('/html/details/Information-details.html?infoId=' + params.infoId + '&infoType=' + params.infoType + '&funcCode=' + params.funcCode + '&isopencomment=0', {}, { noBar: false })
    //刷新上级H5页面的阅读数
    jsBridge.updateStatus({ 'type': 'refresh', 'name': 'refresh', 'infoId': commentObjectId, 'value': '1' })
  }

  //文章内部有goto方法内部跳转
  function goto(params1, params2) {
    if ('-2' === params2) {
      jsBridge.goToEnclosure({ 'url': params1 })
    } else if ('-1' === params2) {
      jsBridge.openWindow(params1, {}, { noBar: true })
    } else {
      jsBridge.openWindow('/html/details/Information-details.html?infoId=' + params1 + '&infoType=1&funcCode=004001&isopencomment=0', {}, { noBar: false })
    }
  }

  //获取资讯详情页面的全部一级评论
  function getcomment(params) {
    // 构建请求参数，支持 orderType 参数
    const requestParams = {
      'pageNum': params.pageNum,
      'pageSize': 5,
      'commentObjectId': params.infoId,
      'datasource': ''
    };

    // 如果传入了 orderType 参数，则添加到请求中
    if (params.orderType) {
      requestParams.orderType = params.orderType;
    }

    Server.informationcommentList.getComment(requestParams).then(res => {
      if (res.code === 0) {
        // 如果是第一页数据（切换评论类型时），清空旧数据
        if (params.pageNum === 1) {
          $('.info-detail-comment-content ul').empty();
        }

        let list = res.data
        let count = `<span>精选评论（${res.total}）</span>`
        // 保存总数用于分页判断
        window.commentTotal = res.total;

        // 根据 orderType 参数设置正确的按钮状态
        const isHot = params.orderType === 2;
        const newActiveClass = isHot ? '' : 'active';
        const hotActiveClass = isHot ? 'active' : '';
        const sliderClass = isHot ? 'slide-right' : '';

        let capsuleHtml = `<div class="comment-switch-capsule">
          <div class="comment-switch-slider ${sliderClass}" id="commentSlider"></div>
          <div class="comment-switch-item ${newActiveClass}" data-type="new" onclick="switchCommentType('new')">
            最新
          </div>
          <div class="comment-switch-item ${hotActiveClass}" data-type="hot" onclick="switchCommentType('hot')">
            最热
          </div>
        </div>`
        $('.info-detail-comment-title').html(count + capsuleHtml)

        // 只有在第一页且评论列表为空时，显示空状态
        if ((!list || list.length === 0) && params.pageNum === 1) {
          let emptyStateHtml = `
            <div class="empty-comment-state">
              <div class="empty-comment-content">
                <img src="../../images/zixun/no-comment.png" alt="暂无评论" class="no-comment-img">
                <div class="no-comment-text">发评论抢沙发~</div>
              </div>
            </div>
          `
          $('.info-detail-comment-content').append(emptyStateHtml)
          return
        }

        list.map((item, index) => {
          // 使用新的时间格式化函数
          item.createDttm = formatTimeDisplay(item.createDttm)
        })
        // <span style="display:${(v.isTop === '1') ? 'inline-block' : 'none'}" class="comment-isTop">精选</span>
        list.map((v, i) => {
          // 生成二级评论HTML
          let secondCommentsHtml = '';
          if (v.childComment && v.childComment.length > 0) {
            // 最多显示2条二级评论
            const displayComments = v.childComment.slice(0, 2);

            secondCommentsHtml = '<div class="second-comment-list">';
            displayComments.forEach(secondComment => {
              // 格式化二级评论时间
              const secondCommentTime = formatTimeDisplay(secondComment.createDttm);

              // 构建回复内容，如果有replyUserName则显示回复关系
              let replyContent = secondComment.content;
              if (secondComment.replyUserName) {
                replyContent = `<span class="second-comment-reply"><span class="second-comment-reply-text">回复</span><span class="second-comment-reply-user">@</span>${secondComment.replyUserName}：</span>${secondComment.content}`;
              }

              secondCommentsHtml += `
                <div class="second-comment-item" data-second-comment-id="${secondComment.commentId}">
                  <div class="second-comment-header">
                    <img class="second-comment-avatar" src="${secondComment.headUrl ? secondComment.headUrl : '../../images/allPic/touxiang.png'}" alt="">
                    <span class="second-comment-name">${secondComment.userName}</span>
                    <span style="display:${secondComment.isOfficial === '1' ? 'inline-block' : 'none'}" class="second-comment-official">官方</span>
                  </div>
                  <div class="second-comment-content second-comment-text-content">${replyContent}</div>
                  <div class="second-comment-footer">
                    <div class="second-comment-time">
                      <span>${secondCommentTime}</span>
                      <span class="point"></span>
                      <span>安徽</span>
                      <span class="reply" onclick="sendComment(event, '${secondComment.userName}', '${v.commentId}')">回复</span>
                    </div>
                    <div class="second-comment-actions">
                      <div class="iconBox">
                        <span>
                          <img src="${configColorType === '1' ? '../../images/zixun/cancel-zan.png' : '../../images/zixun/cancel-zan.png'}" alt="" data-status='1' style="display:${secondComment.ifThumbsup === '0' ? 'inline-block' : 'none'}" onclick="commentPriase({'thumbupObjectId':'${secondComment.commentId}','status':'${secondComment.ifThumbsup === '0' ? '1' : '0'}'},this)">
                          <img src="../../images/zixun/click-zan.png" alt="" data-status='0' style="display:${secondComment.ifThumbsup === '1' ? 'inline-block' : 'none'}" onclick="commentPriase({'thumbupObjectId':'${secondComment.commentId}','status':'${secondComment.ifThumbsup === '1' ? '0' : '1'}'},this)">
                        </span>
                        <span class="click-num">${secondComment.thumbsupCnt}</span>
                      </div>
                    </div>
                  </div>
                </div>
              `;
            });
            secondCommentsHtml += '</div>';

            // 如果有更多回复，显示"共XX条回复"
            if (v.childCount > 2) {
              secondCommentsHtml += `
                <div class="view-more-replies" onclick="dosecondcomment(event, {'datasource':'1','isopencomment':'0','parentId':'${v.commentId}','commentObjectId':'${commentObjectId}'})">
                  <span>共${v.childCount}条回复</span>
                </div>
              `;
            }
          }

          let li =
            `<li data-comment-id="${v.commentId}">
                  <div class="comment-content-left">
                    <img src="${v.headUrl ? v.headUrl : '../../images/allPic/touxiang.png'}" alt="">
                  </div>
                  <div class="comment-content-right">
                    <div class="name">
                      <div class="name-left">
                      <span class="user-name">${v.userName}</span>
                      <span style="display:${v.isOfficial === '1' ? 'inline-block' : 'none'}" class="second-comment-official">官方</span>
                      </div>
                      <img style="display:${v.isTop && v.isTop === '1' ? 'inline-block' : 'none'}" class="is-top" src="../../images/zixun/is-top.png" alt="" />
                    </div>
                    <div class="explain comment-text-content">${v.content}</div>

                    <div class="litterIcon">
                      <div class="comment-bottom-wrap">
                        <div class="create-dttm-box">
                          <span class="create-dttm">${v.createDttm}</span>
                          <span class="point"></span>
                          <span class="create-dttm">安徽</span>
                          <span class="reply" onclick="sendComment(event, '${v.userName}', '${v.commentId}')">回复</span>
                        </div>
                        <div class="comment-content-right-r">
                          <img style="display:none" class="is-del" src="../../images/zixun/delete-icon.png" alt="" />
                          <div class="iconBox">
                            <span style='vertical-align:middle;'>
                              <img src="${configColorType === '1' ? '../../images/zixun/cancel-zan.png' : '../../images/zixun/cancel-zan.png'}" alt="" data-status='1' style="display:${v.ifThumbsup === '0' ? 'inline-block' : 'none'}" onclick="commentPriase({'thumbupObjectId':'${v.commentId}','status':'${v.ifThumbsup === '0' ? '1' : '0'}'},this)">
                              <img src="../../images/zixun/click-zan.png" alt="" data-status='0' style="display:${v.ifThumbsup === '1' ? 'inline-block' : 'none'}" onclick="commentPriase({'thumbupObjectId':'${v.commentId}','status':'${v.ifThumbsup === '1' ? '0' : '1'}'},this)">
                            </span>
                            <span class="click-num">${v.thumbsupCnt}</span>
                          </div>
                        </div>
                      </div>
                    </div>
                    ${secondCommentsHtml}
                  </div>

                </li>`
          $('.info-detail-comment-content ul').append(li)

          // 为当前评论绑定长按事件
          const $currentLi = $('.info-detail-comment-content ul li').last();
          const commentData = {
            commentId: v.commentId,
            content: v.content,
            userName: v.userName,
            userId: v.userId,
            commentObjectId: v.commentObjectId,
            isSecondLevel: false,
            canDelete: v.isDelete && v.isDelete === '1',
          };
          bindCommentLongPress($currentLi.find('.comment-text-content'), commentData);

          // 为二级评论绑定长按事件
          if (v.childComment && v.childComment.length > 0) {
            const displayComments = v.childComment.slice(0, 2);
            displayComments.forEach((secondComment, index) => {
              // 使用requestAnimationFrame确保DOM渲染完成后绑定事件
              requestAnimationFrame(() => {
                const $secondCommentItem = $currentLi.find('.second-comment-item').eq(index);
                const secondCommentData = {
                  commentId: secondComment.commentId,
                  content: secondComment.content,
                  userName: secondComment.userName,
                  userId: secondComment.userId,
                  parentId: v.commentId,
                  isSecondLevel: true,
                  canDelete: secondComment.isDelete && secondComment.isDelete === '1',
                };
                bindCommentLongPress($secondCommentItem.find('.second-comment-text-content'), secondCommentData);
              });
            });
          }
        })

        // 根据total判断是否还有更多数据
        const currentDataCount = $('.info-detail-comment-content ul li').length;
        const hasMoreData = currentDataCount < res.total;

        // 移除之前的"没有更多啦~"提示
        $('.info-detail-comment-content ul .no-more-data').remove();

        // 如果没有更多数据且当前有数据，则添加"没有更多啦~"提示
        if (!hasMoreData && res.data && res.data.length > 0) {
          $('.info-detail-comment-content ul').append('<div class="no-more-data">没有更多啦~</div>')
        }
      } else {
        // jsBridge.toast('数据异常')
      }
      // 重置加载状态，允许下次加载
      isLoadingComments = false;
    }).catch(error => {
      // 请求失败时也要重置加载状态
      isLoadingComments = false;
      console.error('获取评论失败:', error);
    })
  }

  //获取资讯的点赞 收藏 以及评论数量
  function getInformationCnt() {
    Server.informationcommentList.getInformationCnt({ 'infoId': commentObjectId, 'infoType': infoType }).then(res => {
      if (res.code === 0) {
        // 更新footer中的数据
        $('.footer-number').eq(0).text(Utils.formatNumber(res.data.collectionCnt))
        $('.footer-number').eq(1).text(Utils.formatNumber(res.data.thumbsupCnt))
        $('.footer-number-last').text(Utils.formatNumber(res.data.commentCnt))

        // 更新收藏状态 - 根据状态值显示对应图片
        if (res.data.collectionStatus === '0') {
          $('.collect img[data-status="0"]').show()
          $('.collect img[data-status="1"]').hide()
        } else {
          $('.collect img[data-status="1"]').show()
          $('.collect img[data-status="0"]').hide()
        }

        // 更新点赞状态 - 根据状态值显示对应图片
        if (res.data.thumbsupStatus === '0') {
          $('.praise img[data-status="0"]').show()
          $('.praise img[data-status="1"]').hide()
        } else {
          $('.praise img[data-status="1"]').show()
          $('.praise img[data-status="0"]').hide()
        }
      } else if (res.code === -8) {
        // jsBridge.toast(res.data.msg)
        // jsBridge.openLogin()
        jsBridge.delData('token')
        token = ''
        jsBridge.toast('登录过期，请重新登录')
      }
    })
  }

  //点击文章内部点赞按钮（文章点赞）
  function zxupdatePriase1(params1, params2) {
    if (token) {
      let status = $(params2).attr('data-status')
      if (status === '1') {
        let num = $(params2).parent().next().text()
        $(params2).parent().next().text(+num + 1)
        $('.praise img').eq(0).hide().siblings().show()
      } else {
        let num = $(params2).parent().next().text()
        $(params2).parent().next().text(+num - 1)
        $('.praise img').eq(1).hide().siblings().show()
      }
      $(params2).hide().siblings().show()
      Server.realTimeInfo.updatePriase({ 'thumbupObjectId': params1.thumbupObjectId, 'datasource': '1', 'status': params1.status, 'objectSource': '1', 'source': '1' }).then(res => {
        if (res.code === 0) {
          // getinfoDetail({'infoId':commentObjectId,'infoType':infoType})
        } else if (res.code === -8) {
          // jsBridge.toast(res.data.msg)
          // jsBridge.openLogin()
          jsBridge.delData('token')
          token = ''
          jsBridge.toast('登录过期，请重新登录')
        }
      })
    } else {
      // jsBridge.toast('暂未登录,请先登录...')
      jsBridge.openLogin()
    }
  }

  //底部点赞按钮（文章点赞）
  function zxupdatePriase2(params1, params2) {
    if (greyType == 1) {
      return
    }
    if (token) {
      let status = $(params2).attr('data-status')
      if (status === '1') {
        $('.info-detail-content-footer-praise-box .box1 img').eq(0).hide().siblings().show()
        let num = $('.info-detail-content-footer-praise-box .box1').siblings().text()
        $('.info-detail-content-footer-praise-box .box1').siblings().text(+num + 1)
      } else {
        $('.info-detail-content-footer-praise-box .box1 img').eq(1).hide().siblings().show()
        let num = $('.info-detail-content-footer-praise-box .box1').siblings().text()
        $('.info-detail-content-footer-praise-box .box1').siblings().text(+num - 1)
      }
      $(params2).hide().siblings().show()
      Server.realTimeInfo.updatePriase({ 'thumbupObjectId': params1.thumbupObjectId, 'datasource': '1', 'status': params1.status, 'objectSource': '1', 'source': '1' }).then(res => {
        if (res.code === 0) {
           getInformationCnt()
        } else if (res.code === -8) {
          jsBridge.delData('token')
          token = ''
          jsBridge.toast('登录过期，请重新登录')
        }
      })
    } else {
      jsBridge.openLogin()
    }
  }

  //点击评论里面的点赞按钮
  function commentPriase(params1, params2) {
    event.stopPropagation()
    if (token) {
      let status = $(params2).attr('data-status')
      if (status === '1') {
        let num = $(params2).parent().next().text()
        $(params2).parent().next().text(+num + 1)
      } else {
        let num = $(params2).parent().next().text()
        $(params2).parent().next().text(+num - 1)
      }
      $(params2).hide().siblings().show()
      Server.InteractionPriase.updatePriase({ thumbup: { 'thumbupObjectId': params1.thumbupObjectId, 'datasource': '1', 'status': status, 'objectSource': '6' } }).then(res => {
        if (res.code === 0) {
          // getcomment({'infoId':commentObjectId})
        } else if (res.code === -8) {
          // jsBridge.toast(res.data.msg)
          // jsBridge.openLogin()
          jsBridge.delData('token')
          token = ''
          jsBridge.toast('登录过期，请重新登录')
        }
      })
    } else {
      // jsBridge.toast('暂未登录,请先登录...')
      jsBridge.openLogin()
    }
  }

  //点击底部的收藏按钮
  function updateCollect(params1, params2) {
    if (token) {
      let status = $(params2).attr('data-status')
      $(params2).hide().siblings().show()
      Server.realTimeInfo.updateCollectdata({ 'collectionObjectId': params1.collectionObjectId, 'datasource': '1', 'status': params1.status, 'objectSource': '1' }).then(res => {
        if (res.code === 0) {
          getInformationCnt()
        } else if (res.code === -8) {
          jsBridge.delData('token')
          token = ''
          jsBridge.toast('登录过期，请重新登录')
        }
      })
    } else {
      jsBridge.openLogin()
    }
  }

  //点击播放按钮播放音频和暂停播放音频
  function playvioce(params1) {
    if (params1.voiceUrl) {
      $('.info-detail-no-play').hide()
      $('.info-detail-no-play').eq(1).show()
      jsBridge.openInfoVoice({
        'voiceUrl': params1.voiceUrl,
        'mainTitle': params1.mainTitle,
        'infoType': params1.infoType,
        'infoId': params1.infoId,
        'coverImgUrl': params1.coverImgUrl
      })
    }
  }

  function ztplayvioce() {
    jsBridge.closeInfoVoice()
    $('.info-detail-no-play').hide()
    $('.info-detail-no-play').eq(0).show()
  }

  //获取底部评论的状态
  function footerStatus(params) {
    // $('.mainfooter').empty()

  }

  //点击评论小图标
  function commentFocus() {
    if (isComment === '0') {
      return false
    } else {
      $('.commentInpt').focus()
    }
  }
  function stopPropagation(e) {
    e = e || window.event
    if (e.stopPropagation) { //W3C阻止冒泡方法
      e.stopPropagation()
    } else {
      e.cancelBubble = true //IE阻止冒泡方法
    }
  }
  // 评论回复
  function sendComment(event, username, pid) {
    if (token) {
      parentId = pid
      level = 2
      isopencomment = '1'
      // 使用requestAnimationFrame优化性能，确保DOM更新完成
      requestAnimationFrame(function () {
        $('.level1 .commentInpt').attr('placeholder', '回复' + username)
        $('.level1 .commentInpt').focus()
      })
    } else {
      jsBridge.openLogin()
    }
  }
  //点击发送按钮
  function sendcomment() {
    // token = '3de7dae4593ccf0d86b0a6230fb23e99'
    if (token) {
      let content = $('.commentInpt').val()
      if (content === '') {
        jsBridge.toast('内容不为空')
      } else {
        Server.informationcommentList.addcomment({ 'parentId': level == 2 ? parentId : '0', 'commentObjectId': commentObjectId, 'content': content, 'datasource': '1', 'objectSource': '1' }).then(res => {
          if (res.code === 0) {
            jsBridge.toast('评论成功，请等待审核~')
            $('.commentInpt').val('')
            $('.commentInpt').attr('placeholder', '请说说你的看法...')
            $('.info-detail-comment-content ul').empty()
            pageNum = 1
            getcomment({ 'infoId': commentObjectId, 'pageNum': pageNum, 'orderType': 1 })
            $('.commentInpt').blur()
            level = 1
          } else if (res.code === -8) {
            // jsBridge.toast('数据异常')
            jsBridge.delData('token')
            token = ''
            jsBridge.toast('登录过期，请重新登录')
          }
        })
      }
    } else {
      // jsBridge.toast('暂未登录,请先登录...')
      jsBridge.openLogin()
    }
  }

  //input框聚焦失焦,优化延迟处理
  $('.commentInpt').blur(function () {
    // 使用requestAnimationFrame替代setTimeout，提升性能
    requestAnimationFrame(function () {
      // 如果表情面板打开，不隐藏发送按钮
      if (!isEmojiPanelOpen) {
        $('#footer-noconfirm').show()
        $('#footer-confirm').hide()
        $('#faceSendIcon').hide()
        $('#faceIconWrap').show()
        $('.commentInpt').attr('placeholder', '请说说你的看法...')
        isopencomment = '0'
      }
    })
  })
  $('.commentInpt').focus(function () {
    // 直接执行，无需延迟
    $('#footer-noconfirm').hide()
    $('#footer-confirm').show()
    $('#faceSendIcon').show()
    $('#faceIconWrap').hide()
  })

  //从资讯详情页的评论点击回复做二级评论,唤起输入框
  function dosecondcomment(e, params) {
    if (e.stopPropagation) { //W3C阻止冒泡方法
      e.stopPropagation()
    } else {
      e.cancelBubble = true //IE阻止冒泡方法
    }
    // event.preventDefault()
    // console.log('二级')
    if (token) {
      jsBridge.openWindow('/html/comment/commentdetails.html?parentId=' + params.parentId + '&datasource=1' + '&isopencomment=' + params.isopencomment + '&commentObjectId=' + params.commentObjectId, {}, { noBar: false })
    } else {
      // jsBridge.toast('暂未登录，请先登录...')
      jsBridge.openLogin()
    }
  }

  //点击关注
  function follow(params1, params2) {
    if (token) {
      let status = $(params2).attr('data-status')
      if (status === '1') {
        let num = $('.followCnt').text()
        $('.followCnt').text(+num + 1)
      } else {
        let num = $('.followCnt').text()
        $('.followCnt').text(+num - 1)
      }
      $(params2).hide().siblings().show()
      Server.realTimeInfo.updateFollow({ 'followObjectId': params1.follow_object_id, 'datasource': '1', 'status': status, 'objectSource': '6' }).then(res => {
        if (res.code === 0) {
          // $(params2).toggleClass('active')
          // getinfoDetail({'infoId':commentObjectId,'infoType':infoType})
        } else if (res.code === -8) {
          // jsBridge.toast(res.data.msg)
          // jsBridge.openLogin()
          jsBridge.delData('token')
          token = ''
          jsBridge.toast('登录过期，请重新登录')
        }
      })
    } else {
      // jsBridge.toast('暂未登录,请先登录...')
      jsBridge.openLogin()
    }
  }

  //点击返回按钮
  function closeWindow() {
    jsBridge.closeWindows()
  }
  // 添加加载状态标志，防止重复请求
  let isLoadingComments = false;

  //滑动加载下一页
  document.addEventListener('scroll', function () {
    if (isComment === '0') {
      let scroll = $(document).scrollTop()
      //头部显示主标题
      if (scroll !== 0) {
        let title = $('.info-detail-content-title span').text()
        $('.header-title').text(title)
      } else {
        $('.header-title').text('')
      }
      return false
    } else {
      let userAgent = navigator.userAgent; // 获取用户代理字符串
      let isAndroid = /Android/i.test(userAgent); // 检查是否为安卓设备
      let isIOS = /iPhone|iPad|iPod/i.test(userAgent) && !isAndroid; // 检查是否为iOS设备（排除安卓）
      // 对于鸿蒙系统，可能需要更具体的检测，因为它的用户代理字符串可能与安卓相似

      //翻页
      let top = $('.info-detail-comment').offset().top
      let height = $('.info-detail-comment').height() + 16
      let maxHeight = document.body.offsetHeight
      let scroll = $(document).scrollTop()
      //头部显示主标题
      if (scroll !== 0) {
        let title = $('.info-detail-content-title span').text()
        $('.header-title').text(title)
      } else {
        $('.header-title').text('')
      }
      if (Math.floor(top + height - maxHeight) <= Math.floor(scroll)) {
        // 检查是否还有更多数据可以加载，并且当前没有正在加载
        let currentDataCount = $('.info-detail-comment-content ul li').length;
        if (!isLoadingComments && (window.commentTotal === undefined || currentDataCount < window.commentTotal)) {
          isLoadingComments = true; // 设置加载状态
          pageNum++
          getcomment({ 'infoId': commentObjectId, 'pageNum': pageNum, 'orderType': currentOrderType || 1 })
          // console.log('我滚动了')
        }
      }
    }
  })

  // 原生调用关闭声音的方法
  function voiceClose(data1, data2) {
    if (data2.data === commentObjectId) {
      $('#noplay').show()
      $('#yiplay').hide()
      $('.info-detail-no-play').hide()
      $('.info-detail-no-play').eq(0).show()
    }
  }

  //暂停
  function voicePause(data1, data2) {
    if (data2.data === commentObjectId) {
      $('#noplay').show()
      $('#yiplay').hide()
      $('.info-detail-no-play').hide()
      $('.info-detail-no-play').eq(0).show()
    }

  }

  //开始
  function voiceResume(data1, data2) {
    if (data2.data === commentObjectId) {
      $('#noplay').hide()
      $('#yiplay').show()
      $('.info-detail-no-play').hide()
      $('.info-detail-no-play').eq(1).show()
    }
  }

  //点击展开和收起
  function seeAll() {
    // $('.iconBox1').toggleClass('active')
    if ($('.iconBox1').hasClass('active')) {
      $('.iconBox1').removeClass('active')
      $('.seeAllIcon span').text('收起')
      let height = $('.iconBox1').outerHeight(true) * 0.02 + 0.78
      $('.info-detail-content-littleIcon').css('height', height + 'rem')
    } else {
      $('.iconBox1').addClass('active')
      $('.seeAllIcon span').text('展开')
      $('.info-detail-content-littleIcon').css('height', '2.88rem')
    }
  }

  //点击股票跳转股票详情
  function gogupiao(params) {
    jsBridge.openStock(params.exchange, params.code)
  }

  //分享
  function goShare() {
    // console.log('url', templateShareUrl)
    event.stopPropagation()
    // jsBridge.toast('敬请期待')
    Server.infoShare.share({ 'infoId': commentObjectId, 'datasource': '1', 'objectSource': '1', greyType: greyType }).then(res => {
      if (res.code === 0) {
        // let count  = $(params2).next().text()
        // $(params2).next().text(+count+1)
      }
    })
    //分享
    jsBridge.share({
      'scene': '0,1',
      'type': 'url',
      'url': shareUrl + '/html/details/Information-details.html?infoId=' + commentObjectId + '&infoType=' + infoType + '&funcCode=' + funcCode + '&greyType=' + greyType,
      'title': sharetitle ? sharetitle.replace(/&nbsp;/g, '') : '',
      'content': sharecontent ? sharecontent.replace(/&nbsp;/g, '') : '',
      'image': shareImgUrl ? shareImgUrl : '', // 分享图
      'templateShare': '1', // 是否画报分享
      'templateShareUrl': templateShareUrl,
      'infoId': commentObjectId,
      'templateId': templateId,
      'greyType': greyType
    })
  }

  //点击文章里面的分享微信或者分享朋友圈
  function sharewx() {
    jsBridge.share({
      'scene': '0',
      'type': 'url',
      'url': shareUrl + '/html/details/Information-details.html?infoId=' + commentObjectId + '&infoType=' + infoType + '&funcCode=' + funcCode,
      'title': sharetitle ? sharetitle.replace(/&nbsp;/g, '') : '',
      'content': sharecontent ? sharecontent.replace(/&nbsp;/g, '') : '',
      'image': shareImgUrl ? shareImgUrl : ''
    })
  }
  //点击文章里面的举报
  function report() {
    jsBridge.showReportDialog({ infoId: commentObjectId, infoType: infoType })
  }

  function sharepyq() {
    jsBridge.share({
      'scene': '1',
      'type': 'url',
      'url': shareUrl + '/html/details/Information-details.html?infoId=' + commentObjectId + '&infoType=' + infoType + '&funcCode=' + funcCode,
      'title': sharetitle ? sharetitle.replace(/&nbsp;/g, '') : '',
      'content': sharecontent ? sharecontent.replace(/&nbsp;/g, '') : '',
      'image': ''
    })
  }

  // 字体放大显示
  function fontChangeShow() {
    $('.info-detail-font-change').show()
  }

  // 控制字体的放大缩小
  function fontChange() {
    if ('big' === fontZoom) {
      // 大
      isFontBig = 2
      $('.info-detail, .info-detail p,h1, .info-detail .stock-info').css('fontSize', '22px')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-mid')
      $('.info-detail-font-dot').addClass('info-detail-font-dot-right')
      jsBridge.setData('fontChange', 'big')
    } else if ('normal' === fontZoom) {
      // 正常
      isFontBig = 0
      $('.info-detail, .info-detail p,h1, .info-detail .stock-info').css('fontSize', '16px')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-right')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-mid')
      jsBridge.setData('fontChange', 'normal')
    } else {
      // 中
      isFontBig = 1
      $('.info-detail, .info-detail p,h1, .info-detail .stock-info').css('fontSize', '20px')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-right')
      $('.info-detail-font-dot').addClass('info-detail-font-dot-mid')
      jsBridge.setData('fontChange', 'middle')
    }
  }

  function initFont() {
    $('.info-detail-font-change').click(function () {
      $('.info-detail-font-change').hide()
    })

    $('.info-detail-font-change .info-detail-font-area').click(function (e) {
      $('.info-detail-font-change').show()
      e.stopPropagation()
    })

    $('.info-detail-font-change .info-detail-font-sure').click(function (e) {
      $('.info-detail-font-change').hide()
      if (2 === isFontBig) {
        fontZoom = 'big'
      } else if (0 === isFontBig) {
        fontZoom = 'normal'
      } else {
        fontZoom = 'middle'
      }
      fontChange()
      e.stopPropagation()
    })

    $('.info-detail-font-change .info-detail-font-xz1').click(function (e) {
      isFontBig = 0
      $('.info-detail-font-change').show()
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-mid')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-right')
      e.stopPropagation()
    })

    $('.info-detail-font-change .info-detail-font-xz2').click(function (e) {
      isFontBig = 1
      $('.info-detail-font-change').show()
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-mid')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-right')
      $('.info-detail-font-dot').addClass('info-detail-font-dot-mid')
      e.stopPropagation()
    })

    $('.info-detail-font-change .info-detail-font-xz3').click(function (e) {
      isFontBig = 2
      $('.info-detail-font-change').show()
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-mid')
      $('.info-detail-font-dot').removeClass('info-detail-font-dot-right')
      $('.info-detail-font-dot').addClass('info-detail-font-dot-right')
      e.stopPropagation()
    })
  }

  // 表情选择器功能
  let isEmojiPanelOpen = false; // 跟踪表情面板状态

  const emojis = [
    '😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '😊', '😇',
    '🙂', '🙃', '😉', '😌', '😍', '🥰', '😘', '😗', '😙', '😚',
    '😋', '😛', '😝', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🤩',
    '🥳', '😏', '😒', '😞', '😔', '😟', '😕', '🙁', '☹️', '😣',
    '😖', '😫', '😩', '🥺', '😢', '😭', '😤', '😠', '😡', '🤬',
    '🤯', '😳', '🥵', '🥶', '😱', '😨', '😰', '😥', '😓', '🤗',
    '🤔', '🤭', '🤫', '🤥', '😶', '😐', '😑', '😬', '🙄', '😯',
    '😦', '😧', '😮', '😲', '🥱', '😴', '🤤', '😪', '😵', '🤐',
    '👋', '🤚', '🖐️', '✋', '🖖', '👌', '🤌', '🤏', '✌️', '🤞',
    '🤟', '🤘', '🤙', '👈', '👉', '👆', '🖕', '👇', '☝️', '👍',
    '👎', '👊', '✊', '🤛', '🤜', '👏', '🙌', '👐', '🤲', '🤝'
  ];

  // 初始化表情选择器
  function initEmojiPanel() {
    const emojiGrid = document.querySelector('.emoji-grid');
    emojis.forEach(emoji => {
      const emojiItem = document.createElement('div');
      emojiItem.className = 'emoji-item';
      emojiItem.textContent = emoji;
      emojiItem.onclick = function () {
        selectEmoji(emoji);
      };
      emojiGrid.appendChild(emojiItem);
    });
  }

  // 切换表情面板显示/隐藏
  function toggleEmojiPanel() {
    const emojiPanel = document.getElementById('emojiPanel');
    const footer = document.querySelector('.info-detail-footer');
    if (emojiPanel.style.display === 'none') {
      emojiPanel.style.display = 'block';
      isEmojiPanelOpen = true;
      // 使用requestAnimationFrame确保DOM更新后再添加动画类
      requestAnimationFrame(() => {
        emojiPanel.classList.add('show');
        footer.classList.add('footer-up');
      });
    } else {
      emojiPanel.classList.remove('show');
      footer.classList.remove('footer-up');
      isEmojiPanelOpen = false;
      // 保留动画完成的延迟，但减少到250ms
      setTimeout(() => {
        emojiPanel.style.display = 'none';
      }, 250);
    }
  }

  // 选择表情
  function selectEmoji(emoji) {
    const input = document.querySelector('.commentInpt');
    const currentValue = input.value;
    input.value = currentValue + emoji;
    input.focus();
    // 隐藏表情面板
    toggleEmojiPanel();
  }

  // 点击其他区域隐藏表情面板
  document.addEventListener('click', function (e) {
    const emojiPanel = document.getElementById('emojiPanel');
    const faceIconWrap = document.querySelector('.face-icon-wrap');

    if (!emojiPanel.contains(e.target) && !faceIconWrap.contains(e.target)) {
      if (emojiPanel.classList.contains('show')) {
        toggleEmojiPanel();
        // 减少延迟时间，与表情面板关闭动画同步
        setTimeout(() => {
          if (!$('.commentInpt').is(':focus')) {
            $('#footer-noconfirm').show();
            $('#footer-confirm').hide();
            $('#faceSendIcon').hide();
            $('#faceIconWrap').show();
            $('.commentInpt').attr('placeholder', '请说说你的看法...');
            isopencomment = '0';
          }
        }, 250);
      }
    }
  });

  function switchCommentType(type) {
    // 移除所有按钮的活跃状态
    $('.comment-switch-item').removeClass('active');

    // 根据类型设置新的活跃状态和滑块位置
    if (type === 'new') {
      // 点击最新按钮
      $('[data-type="new"]').addClass('active');
      $('#commentSlider').removeClass('slide-right');
    } else if (type === 'hot') {
      // 点击最热按钮
      $('[data-type="hot"]').addClass('active');
      $('#commentSlider').addClass('slide-right');
    }

    // 设置排序类型：1是最新，2是最热，默认按照最新查询
    const orderType = type === 'new' ? 1 : 2;
    currentOrderType = orderType; // 更新全局变量

    // 重置页码
    pageNum = 1;

    // 获取新数据，如果成功就用新的，失败就保持原有数据
    getcomment({
      'infoId': commentObjectId,
      'pageNum': pageNum,
      'orderType': orderType
    });
  }

  // 页面加载完成后初始化表情选择器
  $(document).ready(function () {
    initEmojiPanel();
    initCommentActionSheet();
  });

  // ActionSheet 相关变量
  let currentCommentData = null;
  let pendingDeleteCommentData = null; // 待删除的评论数据
  let longPressTimer = null;
  const LONG_PRESS_DURATION = 400; // 长按时间阈值（毫秒）
  let currentUserId = ''; // 当前用户ID，需要在页面初始化时设置

  // 初始化评论ActionSheet功能
  function initCommentActionSheet() {
    // 绑定ActionSheet按钮事件
    $('#actionCopy').on('click', handleCopyComment);
    $('#actionReply').on('click', handleReplyComment);
    $('#actionDelete').on('click', handleDeleteComment);
    $('#actionCancel').on('click', hideActionSheet);

    // 绑定删除确认弹窗事件
    $('#deleteCancel').on('click', hideDeleteConfirm);
    $('#deleteConfirm').on('click', confirmDeleteComment);

    // 点击遮罩层关闭
    $('.action-sheet-overlay').on('click', hideActionSheet);
    $('.modal-overlay').on('click', hideDeleteConfirm);
  }

  // 显示ActionSheet
  function showActionSheet(commentData) {
    currentCommentData = commentData;

    // 根据评论数据判断是否显示删除按钮
    // 这里可以根据实际业务逻辑判断，比如是否是当前用户的评论
    const canDelete = commentData.canDelete || false;
    $('#actionDelete').toggle(canDelete);

    $('#commentActionSheet').fadeIn(300);
  }

  // 隐藏ActionSheet
  function hideActionSheet() {
    const $content = $('.action-sheet-content');
    $content.addClass('slide-down');

    // 等待动画完成后隐藏整个组件
    setTimeout(() => {
      $('#commentActionSheet').hide();
      $content.removeClass('slide-down');
      currentCommentData = null;
    }, 300);
  }

  // 显示删除确认弹窗
  function showDeleteConfirm() {
    $('#deleteConfirmModal').fadeIn(300);
  }

  // 隐藏删除确认弹窗
  function hideDeleteConfirm() {
    $('#deleteConfirmModal').fadeOut(300);
    // 清空待删除的评论数据
    pendingDeleteCommentData = null;
  }

  // 复制评论内容
  function handleCopyComment() {
    if (!currentCommentData || !currentCommentData.content) {
      return;
    }

    // 创建临时文本域来复制内容
    const textarea = document.createElement('textarea');
    textarea.value = currentCommentData.content;
    document.body.appendChild(textarea);
    textarea.select();

    try {
      document.execCommand('copy');
      jsBridge.toast('复制成功');
    } catch (err) {
      console.error('复制失败:', err);
      jsBridge.toast('复制失败');
    }

    document.body.removeChild(textarea);
    hideActionSheet();
  }

  // 回复评论
  function handleReplyComment() {
    if (!currentCommentData) {
      return;
    }
    const commentContent = currentCommentData;
    hideActionSheet();
    sendComment('', commentContent.userName, commentContent.commentId)
  }

  // 删除评论
  function handleDeleteComment() {
    // 保存待删除的评论数据
    pendingDeleteCommentData = currentCommentData;
    hideActionSheet();
    showDeleteConfirm();
  }

  // 确认删除评论
  function confirmDeleteComment() {
    if (!pendingDeleteCommentData || !pendingDeleteCommentData.commentId) {
      return;
    }

    if (token) {
      Server.informationcommentList.deleteComment({
        commentObjectId: commentObjectId,
        commentId: pendingDeleteCommentData.commentId
      }).then(res => {
        if (res.code === 0) {
          jsBridge.toast('删除成功');
          // 刷新评论列表
          $('.info-detail-comment-content ul').empty();
          pageNum = 1;
          getcomment({ 'infoId': commentObjectId, 'pageNum': pageNum, 'orderType': currentOrderType || 1 })
        } else {
          jsBridge.toast('删除失败');
        }
      }).catch(err => {
        jsBridge.toast('删除失败');
      });
    } else {
      jsBridge.openLogin()
    }
    hideDeleteConfirm();
    // 清空待删除的评论数据
    pendingDeleteCommentData = null;
  }

  // 绑定评论长按事件
  function bindCommentLongPress(element, commentData) {
    let startTime = 0;
    let isLongPress = false;

    // 触摸开始
    element.on('touchstart', function (e) {
      startTime = Date.now();
      isLongPress = false;

      longPressTimer = setTimeout(() => {
        isLongPress = true;
        showActionSheet(commentData);
      }, LONG_PRESS_DURATION);
    });

    // 触摸结束
    element.on('touchend touchcancel', function (e) {
      if (longPressTimer) {
        clearTimeout(longPressTimer);
        longPressTimer = null;
      }

      // 如果是长按，阻止默认的点击事件
      if (isLongPress) {
        e.preventDefault();
        e.stopPropagation();
      }
    });

    // 触摸移动时取消长按
    element.on('touchmove', function (e) {
      if (longPressTimer) {
        clearTimeout(longPressTimer);
        longPressTimer = null;
      }
    });
  }

</script>

</html>